package com.yupi.springbootinit.model.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 销售订单视图对象（优化版）
 * - 删除单产品字段（已迁移到 items 列表）
 * - dueDate 序列化为 deliveryDate（前端友好）
 */
@Data
public class SalesOrderVO implements Serializable {

    /**
     * id
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long id;

    /**
     * 销售订单号
     */
    private String orderNumber;

    /**
     * 订单类型: SALES(销售) / RDO(研发)
     */
    private String orderType;

    /**
     * 合同号
     */
    private String contractNumber;

    /**
     * 订单总金额
     */
    private BigDecimal totalAmount;

    /**
     * 客户名称（根据涉密情况可能脱敏显示）
     */
    private String customerName;

    /**
     * 客户联系方式
     */
    private String customerContact;

    /**
     * 客户是否涉密：0-不涉密，1-涉密
     */
    private Integer isCustomerSecret;

    /**
     * 交付日期
     */
    private Date dueDate;

    /**
     * 紧急程度：URGENT-紧急，NORMAL-正常，LOW-低
     */
    private String urgencyLevel;

    /**
     * 质量等级要求
     */
    private String qualityLevel;

    /**
     * 特殊要求说明
     */
    private String specialRequirement;

    /**
     * 订单状态
     */
    private String orderStatus;

    /**
     * 当前节点描述
     */
    private String currentNode;

    /**
     * 完成进度百分比
     */
    private BigDecimal progress;

    /**
     * 创建人ID
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long createdBy;

    /**
     * 创建人姓名
     */
    private String createdByName;

    /**
     * 备注信息
     */
    private String remark;

    /**
     * 乐观锁版本号
     */
    private Integer version;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    /**
     * 订单明细列表
     */
    private List<SalesOrderItemVO> items;

    private static final long serialVersionUID = 1L;
}